/*******************************************************************************
 * @Info:
 * 用于 QTableWidget::cellChanged() 信号触发保存表格内容。
 * 实际测试，保存表格中内容小于 1.2K 时，基本没有问题。
 * 可预见的，如果数据量变大，应该会出现卡的问题，或者保存失败的问题；
 *
 * 由于 setContext() 更新表格内容会远远快于线程启动和运行，所以并不是每次表格内容变化，
 * 都会被直接保存，而是保存的最后一次更新的表格内容。但是，保存的基本上是最新的表格内容。
 * 这也符合保存的要求：即只需要保存最新的，并不是每一次过程中的修改内容都一定要保存。
*******************************************************************************/
#include "savebythread.h"

#include <QDebug>
#include <QFile>
#include <QDir>
#include <QTextStream>

void SaveByThread::setContext(const QString &text)
{
    m_mutex.lock();
    m_context = text;
    m_mutex.unlock();
}

void SaveByThread::run()
{
    if(!m_context.isEmpty()) //  && m_mutex.tryLock())
    {
        m_mutex.lock();
        QFile f(m_tempPath);
        if(!f.open(QIODevice::WriteOnly | QIODevice::Truncate))
        {
            qDebug() << "[SaveByThread]: open file failed!";
            emit finished(false);
            return;
        }
        QTextStream out(&f);
        out << m_context;
        f.close();
        m_context.clear();
        m_mutex.unlock();

        emit finished(true);
        return;
    }

    qDebug() << "[SaveByThread]: context is empty";
    emit finished(false);
}
